# 需要引用的头文件路径和编译参数
OUTPUT_DIR = ./output/
BUILD_DIR = ./src/
HEADER_PATH = -I./include

# 编译资源
CXX_SRC = $(wildcard ./src/*.cpp)
CXX_OBJS = $(patsubst %cpp, %o, $(CXX_SRC))

# 中间资源
CXX__O = $(wildcard ./src/*.o)
OUTPUT__OBJS = $(wildcard ./output/*.o)

# 参数设置
MV = mv
CXX_BIN = main
CXX_CLEAN = clean
CXXFLAGS = '-std=c++14'

# 生成 main，然后将 .o 文件都移动到 output 目录下
$(CXX_BIN): $(CXX_OBJS)
	$(CXX) $^ -o $@ $(LIBS) && $(MV) $(CXX_OBJS) $(OUTPUT_DIR)

# 生成 .o 文件，然后将它们移动到 src 目录，然后才能进行下一步编译
$(CXX_OBJS): $(CXX_SRC)
	$(CXX) $^ -c $(LIBS) $(CXXFLAGS) $(HEADER_PATH) && $(MV) $(notdir $(CXX_OBJS)) $(BUILD_DIR)

.PHONY: $(CXX_CLEAN)
$(CXX_CLEAN):
	$(RM) $(CXX_BIN) $(OUTPUT__OBJS)